package chapter18;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;

/**
 * 18.1 目录列表器
 * 
 * @author 黄传伟 2018年6月24日
 *
 */
public class DirList {
	public static void main(String[] args) {
		File path = new File(".");
		String[] list;
		if (args.length == 0) {
			// 获取当前路径下的所有文件/目录列表
			list = path.list();
		} else {
			list = path.list(new DirFilter(args[0]));
		}
		// 按忽略大小写的字符自然顺序排序
		Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
		for (String dirItem :list) {
			System.out.println(dirItem);
		}

	}
}

class DirFilter implements FilenameFilter {
	private Pattern pattern;

	public DirFilter(String regex) {
		pattern = Pattern.compile(regex);
	}

	/**
	 * 如果文件名与传入的正则匹配,则返回true
	 * 
	 * @param dir  代表调用方法的{@code File}的目录
	 * @param name 代表调用方法的{@code File}的子目录/文件名
	 * @return 如果文件名与传入的正则匹配,则返回true
	 */
	@Override
	public boolean accept(File dir, String name) {
		// 如果文件名与传入的正则匹配,则返回true
		return pattern.matcher(name).matches();
	}

}
